package com.zzedu.web.controller.system;

import com.zzedu.common.annotation.Log;
import com.zzedu.common.core.controller.BaseController;
import com.zzedu.common.core.domain.AjaxResult;
import com.zzedu.common.core.page.TableDataInfo;
import com.zzedu.common.core.text.Convert;
import com.zzedu.common.enums.BusinessType;
import com.zzedu.common.utils.poi.ExcelUtil;
import com.zzedu.system.domain.ConfigI18n;
import com.zzedu.system.service.ISysConfigI18nService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 国际化配置数据库Controller
 *
 * @author Mr.Wang
 * @date 2023-08-15
 */
@Controller
@RequestMapping("/system/i18n")
public class ConfigI18nController extends BaseController {
    private String prefix = "i18n";

    @Autowired
    private ISysConfigI18nService configI18nService;

    @GetMapping()
    public String i18n() {
        return prefix + "/i18n";
    }

    /**
     * 查询国际化配置数据库列表
     */
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(ConfigI18n configI18n) {
        return getDataTable(configI18nService.page(startPage(), configI18nService.bulidQuery(configI18n)));
    }

    /**
     * 导出国际化配置数据库列表
     */
    @Log(title = "国际化配置数据库", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    @ResponseBody
    public AjaxResult export(ConfigI18n configI18n) {
        List<ConfigI18n> list = configI18nService.list(configI18nService.bulidQuery(configI18n));
        ExcelUtil<ConfigI18n> util = new ExcelUtil<ConfigI18n>(ConfigI18n.class);
        return util.exportExcel(list, "国际化配置数据库数据");
    }

    /**
     * 新增国际化配置数据库
     */
    @GetMapping("/add")
    public String add(ModelMap mmap) {
        ConfigI18n configI18n = new ConfigI18n();
        mmap.put("configI18n", configI18n);
        mmap.put("_method", "/add");
        return prefix + "/operate";
    }

    /**
     * 新增保存国际化配置数据库
     */
    @Log(title = "国际化配置数据库", businessType = BusinessType.INSERT)
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult addSave(ConfigI18n configI18n) {
        boolean res = configI18nService.save(configI18n);
        return toAjax(res);
    }

    /**
     * 修改国际化配置数据库
     */
    @GetMapping("/edit/{id}")
    public String edit(@PathVariable("id") Long id, ModelMap mmap) {
        ConfigI18n configI18n = configI18nService.getById(id);
        mmap.put("configI18n", configI18n);
        mmap.put("_method", "/edit");
        return prefix + "/operate";
    }

    /**
     * 修改保存国际化配置数据库
     */
    @Log(title = "国际化配置数据库", businessType = BusinessType.UPDATE)
    @PostMapping("/edit")
    @ResponseBody
    public AjaxResult editSave(ConfigI18n configI18n) {
        boolean res = configI18nService.updateById(configI18n);
        return toAjax(res);

    }

    /**
     * 删除国际化配置数据库
     */
    @Log(title = "国际化配置数据库", businessType = BusinessType.DELETE)
    @PostMapping("/remove")
    @ResponseBody
    public AjaxResult remove(String ids) {
        List<ConfigI18n> configI18nList = this.configI18nService.listByIds(Stream.of(Convert.toLongArray(ids)).collect(Collectors.toList()));
        boolean res = configI18nService.removeByIds(Stream.of(Convert.toLongArray(ids)).collect(Collectors.toList()));
        if(CollectionUtils.isNotEmpty(configI18nList)){
            for(ConfigI18n configI18n:configI18nList){
                configI18nService.clearCache(configI18n);
            }
        }
        return toAjax(res);
    }
}
